#include <stdio.h>

#define SC_THREAD_CREATE	0x3
#define SC_THREAD_START		0x4
#define SC_THREAD_STOP		0x5


class Thread{
	private:
		unsigned int	_tid;
		unsigned int	_stack;
		unsigned int	_stack_size;
	public:
		Thread(unsigned int stack_size){
			/*1.Выделить пространство под стек в соответствии с параметром stack_size,
			 *  если он не задан, то размер стека устанавливается равным 4096 байт.
			 *2.Проинициализировать _stack  адресом созданного стека, а
			 *  _stack_size размером стека.
			 */
		}
		void setTid(unsigned int tid){
			_tid = tid;
		}
		void setStackSize(unsigned int stack_size){
			_stack_size = stack_size;
		}
		void start(){
			printf("This = %X\n", this);
			unsigned int *obj = (unsigned int *) this;
			unsigned int **func = (unsigned int **) this;
			printf("FuncTable: %X\n", *obj);
			printf("Run Function: %X\n", **func);
		}
		
		virtual void run() = 0;
		virtual void nur(int a) = 0;
		virtual void pur() = 0;
		
		
		
		//Остановка потока, вызывается за пределами объекта.
		void stop(){
			_tid = 5;
			_terminate();
		}
		
		//Остановка потока, вызывается автоматически, после завершения функции run(). Не следует вызывать ее вручную.
		void _terminate(){
			_tid = 5;
		}
};


